状况
搭建完Keil工程后进行编译后发生如下的错误
compiling stm32f4xx_fmc.c...
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(144): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] = 0x000030DB;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(149): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] = 0x000030D2;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(151): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank + 1] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(152): error: #20: identifier "FMC_Bank1E" is undefined
FMC_Bank1E->BWTR[FMC_Bank] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(191): error: #20: identifier "FMC_Bank1" is undefined
tmpbcr = FMC_Bank1->BTCR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MBKEN" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MUXEN" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(195): error: #20: identifier "FMC_BCR1_MTYP" is undefined
tmpbcr &= ((uint32_t)~(FMC_BCR1_MBKEN | FMC_BCR1_MUXEN | FMC_BCR1_MTYP | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_MWID" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_FACCEN" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(196): error: #20: identifier "FMC_BCR1_BURSTEN" is undefined
FMC_BCR1_MWID | FMC_BCR1_FACCEN | FMC_BCR1_BURSTEN | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WAITPOL" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WRAPMOD" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(197): error: #20: identifier "FMC_BCR1_WAITCFG" is undefined
FMC_BCR1_WAITPOL | FMC_BCR1_WRAPMOD | FMC_BCR1_WAITCFG | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_WREN" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_WAITEN" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(198): error: #20: identifier "FMC_BCR1_EXTMOD" is undefined
FMC_BCR1_WREN | FMC_BCR1_WAITEN | FMC_BCR1_EXTMOD | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_ASYNCWAIT" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_CBURSTRW" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(199): error: #20: identifier "FMC_BCR1_CCLKEN" is undefined
FMC_BCR1_ASYNCWAIT| FMC_BCR1_CBURSTRW | FMC_BCR1_CCLKEN));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(253): error: #20: identifier "FMC_Bank1E" is undefined
tmpbwr = FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank];
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_ADDSET" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_ADDHLD" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(256): error: #20: identifier "FMC_BWTR1_DATAST" is undefined
tmpbwr &= ((uint32_t)~(FMC_BWTR1_ADDSET | FMC_BWTR1_ADDHLD | FMC_BWTR1_DATAST | \
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error: #20: identifier "FMC_BWTR1_BUSTURN" is undefined
FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(257): error: #20: identifier "FMC_BWTR1_ACCMOD" is undefined
FMC_BWTR1_BUSTURN | FMC_BWTR1_ACCMOD));
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(269): error: #20: identifier "FMC_Bank1E" is undefined
FMC_Bank1E->BWTR[FMC_NORSRAMInitStruct->FMC_Bank] = 0x0FFFFFFF;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(321): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] |= BCR_MBKEN_SET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(326): error: #20: identifier "FMC_Bank1" is undefined
FMC_Bank1->BTCR[FMC_Bank] &= BCR_MBKEN_RESET;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c(394): error: #20: identifier "FMC_Bank2" is undefined
FMC_Bank2->PCR2 = 0x00000018;
..\..\CodeFile\Bsp\stm32f4xx_fmc.c: 0 warnings, 30 errors
compiling stm32f4xx_fsmc.c...
和
..\Lib\src\stm32f4xx_fsmc.c(129): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030DB;
..\Lib\src\stm32f4xx_fsmc.c(134): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_Bank] = 0x000030D2;
..\Lib\src\stm32f4xx_fsmc.c(136): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_Bank + 1] = 0x0FFFFFFF;
..\Lib\src\stm32f4xx_fsmc.c(137): error: #20: identifier "FSMC_Bank1E" is undefined
FSMC_Bank1E->BWTR[FSMC_Bank] = 0x0FFFFFFF;
..\Lib\src\stm32f4xx_fsmc.c(173): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
..\Lib\src\stm32f4xx_fsmc.c(210): error: #20: identifier "FSMC_Bank1E" is undefined
FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] =
..\Lib\src\stm32f4xx_fsmc.c(220): error: #20: identifier "FSMC_Bank1E" is undefined
FSMC_Bank1E->BWTR[FSMC_NORSRAMInitStruct->FSMC_Bank] = 0x0FFFFFFF;
..\Lib\src\stm32f4xx_fsmc.c(281): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_Bank] |= BCR_MBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(286): error: #20: identifier "FSMC_Bank1" is undefined
FSMC_Bank1->BTCR[FSMC_Bank] &= BCR_MBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(354): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(363): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(422): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 = tmppcr;
..\Lib\src\stm32f4xx_fsmc.c(429): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 = tmppcr;
..\Lib\src\stm32f4xx_fsmc.c(481): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(485): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(493): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(497): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(521): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 |= PCR_ECCEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(525): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 |= PCR_ECCEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(533): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->PCR2 &= PCR_ECCEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(537): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->PCR3 &= PCR_ECCEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(557): error: #20: identifier "FSMC_Bank2" is undefined
eccval = FSMC_Bank2->ECCR2;
..\Lib\src\stm32f4xx_fsmc.c(562): error: #20: identifier "FSMC_Bank3" is undefined
eccval = FSMC_Bank3->ECCR3;
..\Lib\src\stm32f4xx_fsmc.c(617): error: #20: identifier "FSMC_Bank4" is undefined
FSMC_Bank4->PCR4 = 0x00000018;
..\Lib\src\stm32f4xx_fsmc.c(653): error: #20: identifier "FSMC_Bank4" is undefined
FSMC_Bank4->PCR4 = (uint32_t)FSMC_PCCARDInitStruct->FSMC_Waitfeature |
..\Lib\src\stm32f4xx_fsmc.c(716): error: #20: identifier "FSMC_Bank4" is undefined
FSMC_Bank4->PCR4 |= PCR_PBKEN_SET;
..\Lib\src\stm32f4xx_fsmc.c(721): error: #20: identifier "FSMC_Bank4" is undefined
FSMC_Bank4->PCR4 &= PCR_PBKEN_RESET;
..\Lib\src\stm32f4xx_fsmc.c(767): error: #20: identifier "FSMC_Bank2" is undefined
FSMC_Bank2->SR2 |= FSMC_IT;
..\Lib\src\stm32f4xx_fsmc.c(772): error: #20: identifier "FSMC_Bank3" is undefined
FSMC_Bank3->SR3 |= FSMC_IT;
..\Lib\src\stm32f4xx_fsmc.c(777): error: #20: identifier "FSMC_Bank4" is undefined
FSMC_Bank4->SR4 |= FSMC_IT; 如图可见是有一大堆的宏没有定义。
原因
stm32f4xx_fmc.c是在固件库中的一个外设,仅作用于 STM32F429_439xx、STM32F446xx、STM32F469_479xx、STM32F427_437xx系列的芯片,如果不是这些芯片的话将不会引用 stm32f4xx_fmc.h 这个头文件,也就产生了宏没有定义的问题。
具体的说,我们在Option for Target的C/C++选项卡的Define填写了当前所使用芯片的所属系列。
这造成了文件了error。
stm32f4xx_fsmc.c也是同理。
解决
在keil分组中将对应stm32f4xx_fmc.c和stm32f4xx_fsmc.c移除分组就可以了